package cn.usersmsg.util;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
/**
 * 处理ResultSet 结果集
 * @author 张东辉
 *
 */
public class ResultDispose {
	
	ResultSetMetaData rsmd = null;
	/**
	 * 获取结果集的列数
	 * @param rs
	 * @return 列数
	 */
	
	public int getColumnCount(ResultSet rs){
		int ColumnCount =0;
		try {
			rsmd = rs.getMetaData();
			ColumnCount = rsmd.getColumnCount();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return ColumnCount;		
	}
	
	/**
	 * 获取结果集的行数
	 * @param rs
	 * @return 行数
	 */
	public int size(ResultSet rs){
		int size = 0;
		try {
			rsmd = rs.getMetaData();
			while (rs.next()) {
				size++;
			}
			rs.beforeFirst();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return size;
	}
	
	/**
	 * 展示结果集中所有内容
	 * @param rs
	 */
	public void toString(ResultSet rs) {
		try {
			rsmd = rs.getMetaData();
			for (int i = 0; i < rsmd.getColumnCount(); i++) {
				System.out.print(rsmd.getColumnName(i+1)+"\t");
			}
			System.out.println();
			for (int i = 0; i < rsmd.getColumnCount(); i++) {
				System.out.print(rsmd.getColumnTypeName(i+1)+"("+rsmd.getColumnDisplaySize(i+1)+")"+"\t");
			}
			System.out.println();
			while (rs.next()) {
				for (int i = 0; i < rsmd.getColumnCount(); i++) {
					System.out.print(rs.getObject(i+1)+"\t");
				}
				System.out.println();
			}
			rs.beforeFirst();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 展示结果集中 指定行数的  数据
	 * @param rs
	 * @param rowNo
	 */
	public void toStringRow(ResultSet rs,int rowNo){
		try {
			rsmd = rs.getMetaData();
			for (int i = 0; i < rsmd.getColumnCount(); i++) {
				System.out.print(rsmd.getColumnName(i+1)+"\t");
			}
			System.out.println();
			for (int i = 0; i < rsmd.getColumnCount(); i++) {
				System.out.print(rsmd.getColumnTypeName(i+1)+"("+rsmd.getColumnDisplaySize(i+1)+")"+"\t");
			}
			System.out.println();
			int n = 0;
			while (rs.next()) {
				n++;
				if (n==rowNo) {
					for (int i = 0; i < rsmd.getColumnCount(); i++) {
						System.out.print(rs.getObject(i+1)+"\t");
					}
					return;
				}				
			}
			rs.beforeFirst();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 获取结果集中  指定行数  的数据集合
	 * @param rs
	 * @param rowNo
	 * @return
	 */
	public List<Object> getRowValue(ResultSet rs,int rowNo){
		List<Object> list = new ArrayList<Object>();
		try {
			rsmd = rs.getMetaData();
			int n = 0;
			while (rs.next()) {
				n++;
				if (n==rowNo) {
					for (int i = 0; i < rsmd.getColumnCount(); i++) {
						list.add(rs.getObject(i+1));
					}
					return list;
				}				
			}
			rs.beforeFirst();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return list;		
	}
	
	/**
	 * 获取结果集中 指定行 指定列  的数据值
	 * @param rs
	 * @param rowNo
	 * @param cloumnNo
	 * @return
	 */
	public Object getRowColumnValue(ResultSet rs,int rowNo,int cloumnNo){
		Object obj = null;
		try {
			rsmd = rs.getMetaData();
			int n = 0;
			while (rs.next()) {
				n++;
				if (n==rowNo) {
					obj = rs.getObject(cloumnNo);
					return obj;
				}				
			}
			rs.beforeFirst();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return obj;
	}
	
	/**
	 * 获取结果集  指定列数  的列名
	 * @param rs
	 * @param colunm
	 * @return
	 */
	public String getColumnName(ResultSet rs,int column){
		String columnName=null;
		try {
			rsmd=rs.getMetaData();
			columnName = rsmd.getColumnName(column);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return columnName;
	}
	
	/**
	 * 获取结果集  指定列数  的数据类型
	 * @param rs
	 * @param column
	 * @return
	 */
	public String getColumnTypeName(ResultSet rs,int column){
		String columnTypeName = null;
		try {
			rsmd = rs.getMetaData();
			columnTypeName = rsmd.getColumnTypeName(column);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return columnTypeName;
	}
	
	/**
	 * 获取结果集  指定列数  所属的表名
	 * @param rs
	 * @param column
	 * @return
	 */
	public String getTableName(ResultSet rs,int column){
		String tableName = null;
		try {
			rsmd = rs.getMetaData();
			tableName = rsmd.getTableName(column);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return tableName;
	}
	
	/**
	 * 获取结果集  指定列数  所在的数据库名字
	 * @param rs
	 * @param column
	 * @return
	 */
	
	public String getCatalogName(ResultSet rs,int column){
		String databaseName =null;
		try {
			rsmd = rs.getMetaData();
			databaseName = rsmd.getCatalogName(column);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return databaseName;
	}
	/**
	 * 获取结果集  指定列数的 数据类型定义的长度
	 * @param rs
	 * @param column
	 * @return
	 */
	public int getColumnDisplaySize(ResultSet rs,int column){
		int typeLength = 0;
		try {
			rsmd = rs.getMetaData();
			typeLength = rsmd.getColumnDisplaySize(column);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return typeLength;
	}
}
